﻿using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace RobotGerchik.Config
{
    class Cfg
    {
        public static String Start = "Старт";
        public static String Stop = "Стоп";

        public static readonly string ExecFile = "";


        public static TimeSpan UpdateStoptableInterval = TimeSpan.FromMilliseconds(500);

        public static string ZalogMoney = "Залоговые ден.средства";
        public static string KliringMoney = "Клиринговые ден.средства";
        public static string KliringZalogMoney = "Клиринговые залоговые ден.средства";

        public static String Unknown = "Не выбран";
        public static String StopLimit = "Стоп-лимит";
        public static string TakeProfit = "Тэйк-профит";
        public static string LinkedOrder = "Связанная заявка";
        public static string LinkedOOrder = "Со связ. заявкой";
        public static string StopTakeOrder = "Тэйк-профит и стоп-лимит";
        public static string TakeProfitLimitOrder = "Тейк-профит(Лимит. заявка)";

        public static string Rub = "Рубли";
        public static string ValutPrice = "Валюта цены";
        public static string Persent = "Процентах";

        public static string Buy = "Купля";
        public static string Sell = "Продажа";

        public static string Active = "Активна";
        public static string Performed = "Исполнена";
        public static string Cancel = "Снята";
        public static string AddToTs = "Выставлена заявка в ТС";
        public static string RemoveFormTs = "Отвергнута ТС";
        public static string OrderUnknown = "unknown";
        public static string BrokerCancel = "Отклонена брокером";

        #region Параметры для транзака

        #region Статусты сессии на ММВБ и ФОРТС

        #region ММВБ
		/// <summary>
        /// Недоступно для торгов (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBN = "N";
        /// <summary>
        /// Период открытия (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBO = "O";
        /// <summary>
        /// Торги закрыты (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBC = "C";
        /// <summary>
        /// Период закрытия (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBF = "F";
        /// <summary>
        /// Перерыв (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBB = "B";
        /// <summary>
        /// Торговая сессия (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBT = "T";
        /// <summary>
        /// Период послеторгового аукциона (ММВБ)
        /// </summary>
        public static string TransaqTradingStatusMMVBL = "L";
 
	#endregion

        #region FORTS
        /// <summary>
        /// Сессия назначена. Нельзя ставить заявки, но можно удалять (FORTS)
        /// </summary>
        public static string TransaqTradingStatus0 = "0";
        /// <summary>
        /// Сессия идет. Можно ставить и удалять заявки (FORTS)
        /// </summary>
        public static string TransaqTradingStatus1 = "1";
        /// <summary>
        /// Приостановка торгов по всем инструментам. Нельзя ставить заявки, но можно удалять (FORTS)
        /// </summary>
        public static string TransaqTradingStatus2 = "2";
        /// <summary>
        /// Сессия принудительно завершена. Нельзя ставить и удалять заявки (FORTS)
        /// </summary>
        public static string TransaqTradingStatus3 = "3";
        /// <summary>
        /// Сессия завершена по времени. Нельзя ставить и удалять заявки (FORTS)
        /// </summary>
        public static string TransaqTradingStatus4 = "4"; 
        #endregion


        #endregion

        #region Статусы заявок

        public static string TransaqStatusOrderNone="none";

        /// <summary>
        /// Активная
        /// </summary>
        public static string TransaqStatusOrderActive = "active";
        /// <summary>
        /// Снята трейдером (заявка уже попала на рынок и была отменена)
        /// </summary>
        public static string TransaqStatusOrderCancelled = "cancelled";
        /// <summary>
        /// Отклонена Брокером
        /// </summary>
        public static string TransaqStatusOrderDenied = "denied";
        /// <summary>
        /// Прекращена трейдером (условная заявка, которую сняли до наступления условия)
        /// </summary>
        public static string TransaqStatusOrderDisabled = "disabled";
        /// <summary>
        /// Время действия истекло
        /// </summary>
        public static string TransaqStatusOrderExpired = "expired";
        /// <summary>
        /// Не удалось выставить на биржу
        /// </summary>
        public static string TransaqStatusOrderFailed = "failed";
        /// <summary>
        /// Выставляется на биржу
        /// </summary>
        public static string TransaqStatusOrderForwarding = "forwarding";
        /// <summary>
        /// Статус не известен из-за проблем со связью с биржей
        /// </summary>
        public static string TransaqStatusOrderInactive = "inactive";
        /// <summary>
        /// Исполнена
        /// </summary>
        public static string TransaqStatusOrderMatched = "matched";
        /// <summary>
        /// Отклонена контрагентом
        /// </summary>
        public static string TransaqStatusOrderRefused = "refused";
        /// <summary>
        /// Отклонена биржей
        /// </summary>
        public static string TransaqStatusOrderRejected = "rejected";
        /// <summary>
        /// Аннулирована биржей
        /// </summary>
        public static string TransaqStatusOrderRemoved = "removed";
        /// <summary>
        /// Не наступило время активации
        /// </summary>
        public static string TransaqStatusOrderWait = "wait";
        /// <summary>
        /// Ожидает наступления условия
        /// </summary>
        public static string TransaqStatusOrderWatching = "watching";

        #endregion

        #region Статусы стоп-заявок

        /// <summary>
        /// Снята трейдером (заявка уже попала на рынок и была отменена)
        /// </summary>
        public static string TransaqStatusStopOrderCancelled = "cancelled";
        /// <summary>
        /// Отклонена Брокером
        /// </summary>
        public static string TransaqStatusStopOrderDenied = "denied";
        /// <summary>
        /// Прекращена трейдером (стоп-заявка, которую сняли до наступления условия)
        /// </summary>
        public static string TransaqStatusStopOrderDisabled = "disabled";
        /// <summary>
        /// Время действия истекло
        /// </summary>
        public static string TransaqStatusStopOrderExpried = "expired";
        /// <summary>
        /// Не удалось выставить на биржу
        /// </summary>
        public static string TransaqStatusStopOrderFailed = "failed";
        /// <summary>
        /// Ожидает исполнения связанной заявки
        /// </summary>
        public static string TransaqStatusStopOrderLinkwait = "linkwait";
        /// <summary>
        /// Отклонена биржей
        /// </summary>
        public static string TransaqStatusStopOrderRejected = "rejected";
        /// <summary>
        /// Выполнена (Stop Loss)
        /// </summary>
        public static string TransaqStatusStopOrderSlExecuted = "sl_executed";
        /// <summary>
        /// Стоп выставляется на биржу (Stop Loss)
        /// </summary>
        public static string TransaqStatusStopOrderSlForwarding = "sl_forwarding";
        /// <summary>
        /// Стоп ожидает исполнения в защитном периоде
        /// </summary>
        public static string TransaqStatusStopOrderslGuardtime = "sl_guarding";
        /// <summary>
        /// Ожидает исполнения в режиме коррекции (Take Profit)
        /// </summary>
        public static string TransaqStatusStopOrderTpCorrection = "tp_correction";
        /// <summary>
        /// Стоп ожидает исполнения в защитном режиме после коррекции (Take Profit)
        /// </summary>
        public static string TransaqStatusStopOrderTpCorrectionGuardtime = "tp_correction_guardtime";
        /// <summary>
        /// Выполнен (Take Profit)
        /// </summary>
        public static string TransaqStatusStopOrderTpExecuted = "tp_executed";
        /// <summary>
        /// Стоп выставляется на биржу (Take Profit)
        /// </summary>
        public static string TransaqStatusStopOrderTpForwarding = "tp_forwarding";
        /// <summary>
        /// Стоп ожидает исполнения в защитном периоде (Take Profit)
        /// </summary>
        public static string TransaqStatusStopOrderTpGuardtime = "tp_guardtime";
        /// <summary>
        /// Ожидает наступления условия
        /// </summary>
        public static string TransaqStatusStopOrderWatching = "watching";


        #endregion

        public static string limitedTransaq = "Limit";
        public static string MarketTransaq = "Market";

        #endregion

        

        public static object DeepClone(object obj)
        {

            if (obj == null) { return null; }
            object result = null;
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(ms, obj);
                    ms.Position = 0;
                    result = bf.Deserialize(ms);
                }

            }
            catch
            { }
            return result;
        }
    }
}
